/**
@ 作者: 秦东
@ 时间: 2024-12-04 11:46:55
@ 功能: axios实例封装
*/
import axios, { InternalAxiosRequestConfig, AxiosResponse } from "axios";
import { userStror } from "@/utils/pinia/modules/user";
import { ElMessage, ElMessageBox } from "element-plus";

 // 创建 axios 实例
const service = axios.create({
    // 项目基地址
    baseURL: import.meta.env.VITE_APP_BASE_API,
    // 延迟最大5s
    timeout: 50000,
    headers: { 'Content-Type': 'application/json;charset=utf-8' }
})
// =================== 拦截器======================
// 添加请求拦截器
service.interceptors.request.use((config: InternalAxiosRequestConfig) =>  {
    const userPinia = userStror();   //获取人员登录信息
    // 在发送请求之前做些什么
    // console.log("qingqiu 拦截去：",config)
    //补充请求头部函数
    if (userPinia.userKey) {
        config.headers["user-key"] = userPinia.userKey;
    }
    if (userPinia.userToken) {
        config.headers["user-token"] = userPinia.userToken;
    }
    return config;
}, (error: any) => {
    // 对请求错误做些什么
    return Promise.reject(error);
});
  
  
  
// 添加响应拦截器
service.interceptors.response.use((response: AxiosResponse) => {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const { code, msg } = response.data;
    //如果是以下状态直接放行
    if (code === 0 || code === 200 || code === 10001) {
        return response.data;
    }
    //如果是以下状态说明登录超时需要重新登录
    if (code === 7 || code === 300 || code === 301 || code === 302){
        ElMessageBox.confirm("身份令牌已失效！请重新登录！", "提示", {
            confirmButtonText: "确定",
            type: "warning",
        }).then(() => {
            localStorage.clear();
            window.location.href = "/";
        });
        return response.data;
    }
    // 响应数据为二进制流处理(Excel导出)
    if (response.data instanceof ArrayBuffer) {
        return response;
    }
    // console.log("响应拦截去123：",response)
    ElMessage.error(msg || '系统出错');

    return Promise.reject(new Error(msg || 'Error'));
}, (error: any) => {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    console.log("响应拦截去===========================>：",error.response)
    if (error.response&&error.response.data) {
        const { code, msg } = error.response.data;
        if (code === 'A0230') {
            ElMessageBox.confirm('当前页面已失效，请重新登录', '提示', {
                confirmButtonText: '确定',
                type: 'warning'
            }).then(() => {
                localStorage.clear();
                window.location.href = '/';
            });
        }else if(code === 7 || code === 300 || code === 301 || code === 302){
            ElMessageBox.confirm("身份令牌已失效！请重新登录！", "提示", {
                confirmButtonText: "确定",
                type: "warning",
            }).then(() => {
                localStorage.clear();
                window.location.href = "/";
            });
        }else if (code === 10001 || code === 10002 || code === 10003) {
            return Promise.reject(error.message);
        }  else {
            ElMessage.error(msg || '系统出错');
        }
    }
    return Promise.reject(error.message);
});
  
  
  
//导出
export default service